Ekulelu's Blog

OpenCV 3.2.0 in MacOS

这里面的OpenCV是给mac系统用的,如果是用在iOS,那么直接在官网下载iOS的framework就行了。

本来昨晚下班早早的,想想配置一下OpenCV来玩玩,谁知道搞了3个小时都没搞定!github不翻墙连不上去,翻墙软件全局模式挂了。按着网上的方法来安装OpenCV3.2,试了几次都是在下载一个ippcvxxx文件上面出错,连不上github。随后重要在网上找到了下载链接,把下载包仍了进去,但是仍然报错。后面开窍去试了下3.1版本,cmake的generate过了。洗澡回来make,这次仍然报错,说找不到QTKit头文件。百度下来一看,都是说Seirra把某个库文件给改了,尝试了一种把QTKit文件扔进去的办法,根本不行。我想翻桌子!睡觉。。。。

下面记录一下这个过程里面用到的东西和坑。

Cmake

这里的Cmake是编译opencv用的,实际测试发现这种安装方法不可行。你可以尝试下不装的情况下,用homebrew能不能安装opencv。
这个上网去下了一个dmg,安装了,但是要终端里面可以用的话得另外配置。打开cmake,选择Tools菜单->How to install for command line use. 里面提到了三种方法,我试了第一种就可以用了。

OpenCV的Cmake安装

首先安装3.2.0会卡在下载ippicv_macosx_20151201.tgz文件上面,如果你可以翻墙,那么可以试试,否则呵呵。尝试过下载这个文件后,仍在对应的目录,但是仍然报其他错误。GG
尝试安装3.1版本,这个make的时候找不到QTKit,系统是Seirra应该就会出现这个问题。网上的方法太困难了,需要找到Capitan的QTKit文件,然后在什么模式下进行替换。想想万一把电脑搞崩了就更惨了。所以没有继续尝试。至此Cmake安装OpenCV全部GG.

HomeBrew安装OpenCV

网上有另外一种安装OpenCV的方法,就是使用HomeBrew,但是家里的网 brew update失败。这就是我刚刚说的连不上github。所以只能第二天去公司尝试。还好,公司可以update。
首先要更新HomeBrew的一个tag,之前我这里的tag只有两个,根本找不到OpenCV。

1
brew tap homebrew/science

更新成功之后,安装OpenCV3

1
brew install opencv3

顺利的话,上面两个命令之后就可以安装完OpenCV了。安装成功之后,有几个配置的提示。按照需求配置一下,反正我是全配置的。省得以后又找不到command什么的。注意安装完后终端会有提示lib和header的位置,下面会提到。
昨晚上费了3个小时也没装上的OpenCV3.2,今天两个命令就搞定了,想死的心都有。今晚回去再看看家里的电脑行不行,毕竟Seirra的系统怕还是装不上。(Seirra测试可以装)

OpenCV in XCode

作为一个iOS开发者,XCode必备了。所以想着就用它来玩OpenCV就好了。网上找了一些教程来搞,发现前面找的都不靠谱。首先是OpenCV的安装方法不一样,导致OpenCV库的位置根本不同,网上教程的把/usr/local/lib里面的dylib库都扔进工程,根本不行。编译会报链接错误,没定义cv::String之类的。

这里说一下我的方法:
首先,根据HomeBrew安装OpenCV的时候,最后提示的链接库和头文件的位置来看(不排除以后版本会变换地址,所以一切以安装的时候提示为准)

1
2
3
For compilers to find this software you may need to set:
LDFLAGS: -L/usr/local/opt/opencv3/lib
CPPFLAGS: -I/usr/local/opt/opencv3/include

可以找到/usr/local/opt/opencv3的文件夹,但是发现这个文件夹只是一个链接,它指向的位置是/usr/local/Cellar/opencv3/3.2.0。打开这个文件夹,可以看到OpenCV的库和头文件之类的。
打开里面的lib文件夹,可以看到很多的dylib,但是有很多是链接文件,作用应该就是重命名定向。
include文件夹里面则是包含了所有的头文件。
下面用XCode玩OpenCV。
新建XCode的command Line工程。
这里只有一个main.m文件,因为OpenCV用到的是C和C++,所以要把.m文件改为.mm文件。直接重命名main.m就行了。
然后在main.mm里面改为下面的代码,这里为了简洁,删除了其他不必要的代码,比如Foundation之类的库。如果你需要加上Foundation,这里有一个坑。就是要把

1
#import <Foundation/Foundation.h>

放到其他include的后面,否则会报错。之前弄OpenCV for iOS的时候,这个坑搞了好久。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//main.mm
#include <opencv2/opencv.hpp>
int main(int argc, const char * argv[]) {
//get the image from the directed path
IplImage* img = cvLoadImage("your image path", 1);//这里要替换成你的图片地址
//create a window to display the image
cvNamedWindow("picture", 1);
//show the image in the window
cvShowImage("picture", img);
//wait for the user to hit a key
cvWaitKey(0);
//delete the image and window
cvReleaseImage(&img);
cvDestroyWindow("picture");
return 0;
}

然后转到项目的Build Setting里面。在搜索里面搜head,下面列表里面找到Header Search Paths项目。在这个项目里面双击添加OpenCV头文件所在的目录,就是上面提到的/usr/local/Cellar/opencv3/3.2.0/include。
接下来是添加dylib到工程,这个不能在Library Search Paths里面添加目录了。貌似是动态库的原因?
为了好看,先转移到工程的finder下面,新建一个opencvLib目录来存放dylib。然后将/usr/local/Cellar/opencv3/3.2.0/lib里面的dylib(不包括链接文件)都拷贝到刚刚建立的目录,我这里一共是16个。然后再把这个opencvLib目录拖到XCode工程里面。这时可以在工程的Build Phases里面看到Link binary with libraries存在了刚刚添加的dylib库了。

然后运行。这样就可以弹一个窗显示你的图片了。
至此,XCode可以运行起OpenCV。
下面就是慢慢学习了。